<template>
  <j-modal
    title="审核信息"
    :width="800"
    :visible="visible"
    :footer="null"
    @cancel="handleCancel">
    
    <a-spin :spinning="confirmLoading">
      <a-descriptions title="审核信息" bordered :column="1">
        <a-descriptions-item label="领料单号">{{ model.requisitionNo }}</a-descriptions-item>
        <a-descriptions-item label="审核人">{{ model.approverName }}</a-descriptions-item>
        <a-descriptions-item label="审核时间">{{ model.approveTime }}</a-descriptions-item>
        <a-descriptions-item label="审核意见">{{ model.approveComment || '-' }}</a-descriptions-item>
      </a-descriptions>
      
      <a-divider>附件信息</a-divider>
      
      <a-empty v-if="!attachments || attachments.length === 0" description="暂无附件" />
      
      <a-list v-else itemLayout="horizontal" :dataSource="attachments">
        <a-list-item slot="renderItem" slot-scope="item">
          <a-list-item-meta>
            <div slot="title">
              <a-icon :type="getFileIcon(item.fileType)" style="margin-right: 8px" />
              <a @click="handleDownload(item)">{{ getFileName(item.fileName) }}</a>
            </div>
            <div slot="description">
              <span>{{ item.fileType ? item.fileType.toUpperCase() : '未知' }} 文件</span>
              <span style="margin-left: 16px; color: #999;">{{ formatFileSize(item.fileSize) }}</span>
            </div>
          </a-list-item-meta>
          <div>
            <a-button type="link" @click="handleDownload(item)" :loading="item.downloadLoading">
              <a-icon type="download" v-if="!item.downloadLoading" />下载
            </a-button>
          </div>
        </a-list-item>
      </a-list>
    </a-spin>
  </j-modal>
</template>

<script>
  import { requisitionDetail, requisitionAttachmentList, requisitionAttachmentUpload } from '@/api/wms'
  import { getFileAccessHttpUrl } from '@/api/manage'
  import Vue from 'vue'
  
  export default {
    name: 'RequisitionApproveInfoModal',
    data() {
      return {
        visible: false,
        model: {},
        attachments: [],
        confirmLoading: false,
        token: '', // 用于认证的token
        uploadUrl: window._CONFIG['domianURL'] + '/wms/requisition/attachment/upload',
        previewVisible: false,
        previewImage: ''
      }
    },
    created() {
      // 获取token
      this.token = Vue.ls.get('Access-Token')
    },
    methods: {
      show(id) {
        this.visible = true
        this.loadData(id)
      },
      
      loadData(id) {
        this.confirmLoading = true
        
        // 清空数据
        this.model = {}
        this.attachments = []
        
        // 加载领料单数据
        requisitionDetail({id: id}).then(res => {
          if (res.success) {
            this.model = res.result || {}
            
            // 加载附件数据
            this.loadAttachments(id)
          }
        }).finally(() => {
          this.confirmLoading = false
        })
      },
      
      // 加载附件数据
      loadAttachments(requisitionId) {
        requisitionAttachmentList({requisitionId: requisitionId}).then(res => {
          if (res.success) {
            // 为每个附件添加加载状态标志
            this.attachments = (res.result || []).map(item => ({
              ...item,
              previewLoading: false,
              downloadLoading: false
            }))
          }
        })
      },
      
      // 下载附件
      handleDownload(item) {
        if (item.downloadLoading) return; // 如果正在加载，则不重复操作
        
        try {
          // 设置加载状态
          this.$set(item, 'downloadLoading', true);
          
          // 直接获取可访问的URL
          const fileUrl = getFileAccessHttpUrl(item.filePath);
          if (!fileUrl) {
            this.$message.error('无法获取文件访问路径');
            return;
          }
          
          let link = document.createElement('a');
          link.href = fileUrl;
          link.download = item.fileName;
          document.body.appendChild(link);
          link.click();
          document.body.removeChild(link);
          
          this.$message.success('文件下载已开始');
        } catch (error) {
          console.error('下载文件失败:', error);
          this.$message.error('下载文件失败: ' + (error.message || '未知错误'));
        } finally {
          // 无论成功还是失败，都重置加载状态
          this.$set(item, 'downloadLoading', false);
        }
      },
      
      handleCancel() {
        this.visible = false
      },
      
      // 获取文件图标
      getFileIcon(fileType) {
        if (!fileType) return 'file';
        
        fileType = fileType.toLowerCase();
        
        // 图片文件
        if (['jpg', 'jpeg', 'png', 'gif', 'bmp'].includes(fileType)) {
          return 'picture';
        }
        
        // PDF文件
        if (fileType === 'pdf') {
          return 'file-pdf';
        }
        
        // Word文件
        if (['doc', 'docx'].includes(fileType)) {
          return 'file-word';
        }
        
        // Excel文件
        if (['xls', 'xlsx'].includes(fileType)) {
          return 'file-excel';
        }
        
        // 压缩文件
        if (['zip', 'rar', '7z', 'tar', 'gz'].includes(fileType)) {
          return 'file-zip';
        }
        
        // 文本文件
        if (['txt', 'log', 'md'].includes(fileType)) {
          return 'file-text';
        }
        
        // 默认文件图标
        return 'file';
      },
      
      // 格式化文件名
      getFileName(fileName) {
        if (!fileName) return '未知文件';
        
        // 如果文件名包含时间戳（通常格式为 filename_timestamp.ext 或 filename(timestamp).ext）
        // 我们可以尝试提取出更友好的文件名
        
        // 领料单文件名通常格式: 领料单-LLDxxx_timestamp.pdf
        const match = fileName.match(/^(.*?)[\-_\(][\d]+[\.\)]/);
        
        if (match && match[1]) {
          // 返回时间戳前的文件名部分
          return match[1] + fileName.substring(fileName.lastIndexOf('.'));
        }
        
        return fileName;
      },
      
      // 格式化文件大小
      formatFileSize(fileSize) {
        if (!fileSize || isNaN(Number(fileSize))) return '未知大小';
        
        fileSize = Number(fileSize);
        
        if (fileSize < 1024) {
          return fileSize + ' B';
        } else if (fileSize < 1024 * 1024) {
          return (fileSize / 1024).toFixed(2) + ' KB';
        } else if (fileSize < 1024 * 1024 * 1024) {
          return (fileSize / (1024 * 1024)).toFixed(2) + ' MB';
        } else {
          return (fileSize / (1024 * 1024 * 1024)).toFixed(2) + ' GB';
        }
      }
    }
  }
</script>

<style scoped>
</style> 